package com.mdp.workflow.api;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mdp.workflow.biz.ru.vo.TaskActionVo;
import org.flowable.bpmn.model.UserTask;
import org.flowable.task.api.Task;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 流程任务实例 Service 接口
 *
 * @author jason
 *@author 唛盟开源9哥
 */
public interface FlowTaskService {
    

    /**
     * 通过任务
     */
    void agreeTask(TaskActionVo params);


    /**
     * 不同意，但是流程继续流转，与拒绝相比，拒绝是流程直接结束
     */
    void disAgreeTask(TaskActionVo params);

    /**
    /**
     * 将流程任务分配给指定用户 
     * @param params  分配请求
     */
    void transferTask(TaskActionVo params);

    /**
     * 拒绝，否决，流程终止
     * @param reqVO
     */
    void rejectTask(TaskActionVo reqVO);

    /**
     * 更新 Task 状态，在创建时
     *
     * @param task 任务实体
     */
    void updateTaskStatusWhenCreated(Task task);

    /**
     * 更新 Task 状态，在取消时
     *
     * @param taskId 任务的编号
     */
    void updateTaskStatusWhenCanceled(String taskId);
    /**
     * 获取任务
     *
     * @param id 任务编号
     * @return 任务
     */
    Task getTask(String id);

    /**
     * 将任务回退到指定的 targetDefinitionKey 位置 
     * @param params  回退的任务key和当前所在的任务ID
     */
    void rollbackTask(TaskActionVo params);

    /**
     * 将指定任务委派给其他人处理，等接收人处理后再回到原审批人手中审批 
     * @param params  被委派人和被委派的任务编号理由参数
     */
    void delegateTask(TaskActionVo params);

    /**
     * 任务加签
     * @param params  被减签的任务 ID，理由
     */
    void createSignTask(TaskActionVo params);
    /**
     * 任务减签
     * @param params  被减签的任务 ID，理由
     */
    void deleteSignTask(TaskActionVo params);

    /**
     * 获取指定任务的子任务列表
     *
     * @param parentTaskId 父任务ID
     * @return 子任务列表
     */
    List<Task> getTaskListByParentTaskId(String parentTaskId);

    /**
     * 通过任务 ID，查询任务名 Map
     *
     * @param taskIds 任务 ID
     * @return 任务 ID 与名字的 Map
     */
    Map<String, String> getTaskNameByTaskIds(Collection<String> taskIds);

    /**
     * 查询任务的可回退节点
     * @param taskId
     * @return
     */
    public List<UserTask> getUserTaskListByReturn(String taskId);


    /**
     * 更新 Task 拓展记录，并发送通知
     *
     * @param task 任务实体
     */
    void updateTaskExtAssign(Task task);

    void addCommentMsg(String taskId, String procInstId, String commentMsg);

    List<Map<String, Object>> selectListMapByWhere(IPage page, QueryWrapper<com.mdp.workflow.biz.ru.entity.Task> qw, Map<String, Object> params);

    com.mdp.workflow.biz.ru.entity.Task getById(String id);

    void sponsorsTask(TaskActionVo reqVO);


}
